// entry-server.js
import { createApp } from './app'

export default async context => {
    // 因为有可能会是异步路由钩子函数或组件，所以我们将返回一个 Promise，
    // 以便服务器能够等待所有的内容在渲染前，
    // 就已经准备就绪。
    const { app, router, store } = createApp()

    const meta = app.$meta()
    context.meta = meta || 'cbp'
    // 设置服务器端 router 的位置
    router.push(context.url)

    // 等到 router 将可能的异步组件和钩子函数解析完
    await new Promise(router.onReady.bind(router))

    // 在客户端渲染完成之后会被调用
    context.rendered = () => {
        // 在应用渲染完成以后，服务端 Vuex 容器中已经填充了状态数据 
        // 这里手动的把容器中的状态数据放到 context 上下文中 
        // Renderer 在渲染页面模板的时候会把 state 序列化为字符串串内联到页面中 
        // window.__INITIAL_STATE__ = store.state
        context.state = store.state
    }

    return app
}